package com.qijian.mold.repository;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qijian.mold.domain.dto.*;
import com.qijian.mold.domain.entity.MoldChange;
import com.qijian.mold.domain.param.mold.GetEqpParam;
import com.qijian.mold.domain.vo.moldChange.EqpVo;
import com.qijian.mold.domain.vo.moldChange.MoldChangeDownVo;
import com.qijian.mold.domain.vo.moldChange.WorkOrderDetailsVo;
import com.qijian.mold.domain.vo.moldChange.MoldChangeListVo;
import com.qijian.mold.domain.vo.user.UserDetailsVo;

import java.util.List;

/**
 * 换模信息
 *
 * @author anni.zhu
 * @author anni.zhu@king-v.com
 * Created in 2025/3/29 17:25
 */
public interface MoldChangeRepository extends IService<MoldChange> {
    /**
     * 根据设备id获取设备信息
     * @param eqpId
     * @return
     */
    EqpVo getEqpDetail(Long eqpId);

    /**
     * 根据设备code获取设备信息
     * @param code
     * @return
     */
    EqpVo getEqpByCode(String code);

    /**
     * 根据工序单id和工单id查询明细
     * @param workOrderDetailId
     * @return
     */
    WorkOrderDetailsVo getWorkOrderDetails(Long workOrderDetailId);

    /**
     * 分页获取换模信息
     * @param dto
     * @return
     */
    Page<MoldChangeListVo> getByPage(SelectMoldChangeDto dto);

    /**
     * 根据当前用户获取换模申请单数据
     * @param dto
     * @return
     */
    Page<MoldChangeDownVo> getMoldChangeListByCurrentId(GetMoldChangeListByCurrentIdDto dto);

    /**
     * 获取设备列表
     * @return
     */
    Page<EqpVo> getEqpList(GetEqpDto dto);

    /**
     * 获取工单列表
     * @return
     */
    Page<WorkOrderDetailsVo> getWorkOrderDetailsList(GetWorkOrderDetailsListDto dto);

    /**
     * 查看该用户是不是对应的角色
     * @param userId
     * @return
     */
    Boolean getMoleRoleByUserId(Long userId,String roleKey);

    /**
     * 根据角色key获取用户
     * 获取车间操作员和技术员
     * @return
     */
    Page<UserDetailsVo> getUserByRoleKey(GetUserDetailsByRoleTypeDto dto);

    /**
     * 根据ids获取用户
     * @param ids
     * @return
     */
    List<UserDetailsVo> getUserListByIds(List<Long> ids);

    /**
     * 根据角色key和工段id获取用户
     * @return
     */
    Page<UserDetailsVo> getOperatorByRoleKey(GetUserDetailsByRoleTypeDto dto);

    /**
     * 查看该用户是不是该角色并且属于该工段
     * @param roleKey
     * @param locationId
     * @param userId
     * @return
     */
    Boolean getOperatorByLocationId(String roleKey,Long locationId,Long userId);
}
